from PIL import Image
import os
import argparse
from pathlib import Path

def process_images(input_dir, output_dir, size=None, format=None, watermark=None):
    """
    批量处理图片
    :param input_dir: 输入图片目录
    :param output_dir: 输出目录
    :param size: 调整尺寸，如"800x600"
    :param format: 转换格式，如"jpg"、"png"
    :param watermark: 水印文本
    """
    # 解析尺寸
    resize_size = None
    if size:
        try:
            width, height = map(int, size.split('x'))
            resize_size = (width, height)
        except:
            print("尺寸格式错误，应为'宽x高'，如'800x600'")
            return
    
    # 创建输出目录
    Path(output_dir).mkdir(parents=True, exist_ok=True)
    
    # 支持的图片扩展名
    image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp')
    
    try:
        count = 0
        # 遍历输入目录
        for filename in os.listdir(input_dir):
            if filename.lower().endswith(image_extensions):
                input_path = os.path.join(input_dir, filename)
                # 打开图片
                with Image.open(input_path) as img:
                    # 调整尺寸
                    if resize_size:
                        img = img.resize(resize_size)
                    
                    # 添加水印（简单文本水印）
                    if watermark:
                        from PIL import ImageDraw, ImageFont
                        draw = ImageDraw.Draw(img)
                        # 尝试使用默认字体（可能需要调整路径）
                        try:
                            font = ImageFont.truetype("arial.ttf", 20)
                        except:
                            font = ImageFont.load_default()
                        # 放置在右下角
                        width, height = img.size
                        draw.text((width-100, height-30), watermark, font=font, fill=(255,255,255,128))
                    
                    # 确定输出文件名和格式
                    name, ext = os.path.splitext(filename)
                    output_format = format.lower() if format else ext[1:].lower()
                    output_filename = f"{name}.{output_format}"
                    output_path = os.path.join(output_dir, output_filename)
                    
                    # 保存图片
                    img.save(output_path, format=output_format.upper())
                    count += 1
                    print(f"处理完成: {filename} -> {output_filename}")
        
        print(f"\n全部完成！共处理 {count} 张图片")
    
    except Exception as e:
        print(f"处理失败: {str(e)}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='图片批量处理脚本')
    parser.add_argument('input', help='输入图片目录')
    parser.add_argument('output', help='输出目录')
    parser.add_argument('--size', help='调整尺寸，如"800x600"')
    parser.add_argument('--format', help='转换格式，如"jpg"或"png"')
    parser.add_argument('--watermark', help='添加水印文本')
    
    args = parser.parse_args()
    
    # 安装依赖提示
    try:
        import PIL
    except ImportError:
        print("请先安装Pillow库: pip install pillow")
        exit(1)
    
    process_images(
        input_dir=args.input,
        output_dir=args.output,
        size=args.size,
        format=args.format,
        watermark=args.watermark
    )
